########################################################################################
##  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING THIS SOFTWARE
##
##  By downloading, copying, installing or using the software you agree to this license.
##  If you do not agree to this license, do not download, install, copy or use the software.
##
## Copyright (C) 2013, AerVision Technologies Pty Ltd, all rights reserved.
##
## Redistribution and use in source and binary forms, with or without modification,
## are permitted provided that the following conditions are met:
##
##   * Redistribution's of source code must retain the above copyright notice,
##     this list of conditions and the following disclaimer.
##
##   * Redistribution's in binary form must reproduce the above copyright notice,
##     this list of conditions and the following disclaimer in the documentation
##     and/or other materials provided with the distribution.
##
##   * The name of AerVision Technologies, may not be used to endorse or promote products
##     derived from this software without specific prior written permission.
##
## This software is provided by the copyright holders and contributors to demonstrate 
## www.AerCloud.net Framework as a Service API (FaaS), "as is" and
## any express or implied warranties, including, but not limited to, the implied
## warranties of merchantability and fitness for a particular purpose are disclaimed.
## In no event shall the copyright holder or contributors be liable for any direct,
## indirect, incidental, special, exemplary, or consequential damages
## (including, but not limited to, procurement of substitute goods or services;
## loss of use, data, or profits; or business interruption) however caused
## and on any theory of liability, whether in contract, strict liability,
## or tort (including negligence or otherwise) arising in any way out of
## the use of this software, even if advised of the possibility of such damage.
########################################################################################

from PIL import Image
        
class ImageUtils():
    @staticmethod
    def Resize(img, size):
        w, h = img.size
        r = min(size[0]*1.0/w, size[1]*1.0/h)
        size = (int(r*w), int(r*h))
        img = img.resize(size, Image.ANTIALIAS)
        return img
        
    @staticmethod
    def CropFace(img, faceRect):
        w = faceRect.width
        h = faceRect.height
        x = faceRect.x
        y = faceRect.y
        x = int(x - w/4.0)
        y = int(y - h * 0.4)
        w = int(w * 1.5)
        h = int(h * 1.5)
        if x < 0:
            w += x
            x = 0
        if y < 0:
            h += y
            y = 0
        if x + w > img.size[0]:
            w += img.size[0] - (x + w)
        if y + h > img.size[1]:
            h += img.size[1] - (y + h)
            
        w = min(w, h)
        h = w
        d = min(256, w)
        img = img.crop((x, y, x + w, y + h))
        img = img.resize((d, d))
        return img
    
if __name__ == "__main__":
    pass
